Garuda Linux Benchmark Comparison Versus Solus

Aug. 6, 2021, 6:27 p.m.

Besides producing a beautiful Linux distribution by customizing the theme of the Plasma desktop, the focus of Garudal Linux is to optimize the distribution for performance. As a supplement to Garudal Linux Review [KDE Dragonized (D460nized),210621], I thought it would be interesting to see if the optimizations that the distribution makes do in fact result in better performance. I decided to use Phoronix Test Suite (discussed on this site in Introduction to Phoronix Test Suite) to benchmark Garuda and Solus -- another distribution that, at least in a previous incarnation, focused on performance -- and compare the results.

This article presents the results of the test, as well as some of the details in preparing both distributions installed on the Dell G5 for the testing.

Introduction

The tests were performed on a Dell G5 5587 with an Intel Core-i7 8750H with an integrated Intel UHD-630 integrated graphics card, a discrete Nvidia 1050 Ti Mobile graphics card, 500 GB Samsung EVO 970 Plus PCIe NVMe SSD, 1 TB Samsung QVO 860 SATA SSD, and 24 GB of RAM. The details according to Phoronix are shown in the following image.

The Details of the System Configuration
Click on any of the thumbnails to view a slideshow of the images.

Instead of choosing a few individual tests, I decided to use test suites -- which are a collection of individual tests that can be executed in one operation -- to get a better indication of overall performance. Not only that, but I chose numerous test suites, to get an even better understanding of the performance of each distribution in the comparison.

Of the available test suites, I initially decided to use only five task-centric test suites based on my particular computing needs and interests, as well as the kernel, disk, and memory performance related suites. My initial choices were:

  • pts/cad - CAD System
  • pts/compiler - C/C++ Compiler Tests Processor
  • pts/disk - Disk Test Suite Disk
  • pts/hpc - HPC - High Performance Computing System
  • pts/kernel - Common Kernel Benchmarks System
  • pts/memory - Memory Test Suite Memory
  • pts/programmer - Programmer / Developer System Benchmarks System
  • pts/scientific-computing - Scientific Computing System

Upon seeing that the installation of all of these suites would have taken many hours and hundreds of gigabytes of storage, I limited my choices to the following test suites:

  • pts/disk - Disk Test Suite Disk
  • pts/kernel - Common Kernel Benchmarks System
  • pts/memory - Memory Test Suite Memory
  • pts/programmer - Programmer / Developer System Benchmarks System
  • pts/workstation - Common Workstation Benchmarks

My choice of tests were further limited by the fact that some of the tests in these suites failed to install for reasons I didn't investigate. The determination of the success of the Garuda developers in producing a highly performant distribution is ultimately based on the tests from these test suites that installed and produced results, and furthermore were filtered by the Phoronix Test Suite Result Viewer to not include outliers or those that that were "noisy" -- a term used by the Phoronix Test Suite Result Viewer.

The Result Viewer is an excellent browser based Result Viewer which produces results graphs. One of its features is its ability to filter the results included in graphs and categorize the tests into performance areas of interest, which I also use to categorize the test results. The graphs produced by the Result Viewer are in addition to the unfiltered graphs created and saved in the results directory for each individual test.

The Phoronix Test Suite Result Viewer
Phoronix Test Suite includes browser based Result Viewer, which can modify the graphs shown based on user inputs.

Since most readers viewing this page are probably more interested in the results than the details of how they were produced with Phoronix Test Suite, I present the results first. The details of installing and configuring Phoronix Test Suite on both distributions, preparing and performing the tests follow the results. An introduction to PTS is also at Introduction to Phoronix Test Suite.

Results

Phoronix Test Suite Result Viewer determined that the XX tests performed could be categorized into the seventeen computing areas of interest shown in the following table. Note that many tests can be considered to be in more than one area of interest. The table shows the number of tests in each category where one of the distributions performed better than the other (wins), even if the difference in the results of a particular test were very close. It shows that Solus performed better than Garuda in only one category of the seventeen -- based on the number of wins in the category by each distribution.

Category of Interest Garuda Wins Solus Wins
Kernel Tests 59 11
Memory Tests 26 3
Disks Tests
Three tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
2 0
Scientific Computing Tests 2 1
Cryptography Tests 10 5
Server Tests 2 1
Nvidia Tests 6 0
Python Tests
Six tests total. Two tests not completed by Garuda. Only tests which completed and produced good results on both distributions included.
3 1
Multi-Core Tests
Twenty-eight tests total. Three tests not completed by Garuda. Two tests not completed by Solus. Only tests which completed and produced good results on both distributions included.
22 1
Single Threaded Tests 3 1
HPC Tests
Six tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
4 1
Linear Algebra Tests 2 0
Timed Code Compilation Tests 1 2
C/C++ Compiler Tests
Sixteen tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
12 3
Programmer/Developer Tests
Thirty-five tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
24 10
OpenCL Tests
Six tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
5 0
OpenMP Tests
Four tests total. One test not completed by Garuda. Only tests which completed and produced good results on both distributions included.
3 0

The graphical results of each individual test grouped by area of interest are available below for closer examination.

Kernel Test Results

Programmer/Developer Tests Results
Click on any of the thumbnails to view a slideshow of the images.

Memory Tests Results

Memory Tests Results
Click on any of the thumbnails to view a slideshow of the images.

Disk Tests Results

Disk Tests Results
Click on any of the thumbnails to view a slideshow of the images.

Scientific Computing Tests Results

Scientific Computing Tests Processes
Click on any of the thumbnails to view a slideshow of the images.

Cryptography Tests Results

Cryptography Tests Processes
Click on any of the thumbnails to view a slideshow of the images.

Server Tests Results

Server Tests Processes
Click on any of the thumbnails to view a slideshow of the images.

Nvidia Tests Results

Nvidia Tests Processes
Click on any of the thumbnails to view a slideshow of the images.

Python Tests Results

Python Tests Processes
Click on any of the thumbnails to view a slideshow of the images.

Multi-Core Tests Results

Multi-Core Tests Results
Click on any of the thumbnails to view a slideshow of the images.

Single Threaded Tests Results

Single Thread Tests Results
Click on any of the thumbnails to view a slideshow of the images.

HPC Tests Results

Multi-Core Processes
Click on any of the thumbnails to view a slideshow of the images.

Linear Algebra Tests Results

Linear Algebra Tests Results

Timed Code Compilation Tests Results

Timed Code Compilation Tests Results

C/C++ Compiler Tests Results

C/C++ Compiler
Click on any of the thumbnails to view a slideshow of the images.

Programmer/Developer Tests Results

Programmer/Developer Tests Results
Click on any of the thumbnails to view a slideshow of the images.

OpenCL Tests Results

OpenCL Tests Results
Click on any of the thumbnails to view a slideshow of the images.

OpenMP Tests Results

OpenMP Tests Results
Click on any of the thumbnails to view a slideshow of the images.

Installing Phoronix Test Suite

Phoronix Test Suite can be installed using various methods. Supported Linux distributions offer the software form their native package repositories for installation with their native package managers. A universal installation tarball is also available for UNIX like systems that includes an installation script for system-wide installation. PTS can also be used without installation just by running the executable contained in the directory created by extracting the tarball. I chose to install Phoronix Test Suite for system-wide access for use by root on both Garuda and Solus using the installation script provided by the Phoronix universal installation tarball for Linux/BSD/and MacOS.

Download

The universal installation tarball is available on its Downloads page, along with packages for Debian based systems.

The Phoronix Test Suite Download Page

Installation

After extracting the tar.gz file and changing directories to the root of the extracted directory, executing the install-sh script as root will perform the installation.

 ╭─brook@g5 in ~/DataEXT4/SoftwareDownloads/phoronix-test-suite/phoronix-test-suite took 3ms
 ╰─λ sudo bash ./install-sh

Installing Phoronix Test Suite
Executing the install-sh script included in the tar.gz file as root installs Phoronix Test Suite for system-wide use.

Configuring Phoronix Test Suite

Phoronix Test Suite is primarily configured in one of two configuration files depending on whether it is system-wide, privileged user or per ordinary user configuration, /etc/phoronix-test-suite.xml for system-wide, privileged and ~/.phoronix-test-suite/user-config.xml for execution as a specific ordinary user.

Test results of tests performed on any installed distribution on this computer to should be available to any other distribution. This means that test results must be stored in a data partition accessible to all installed distributions. For this requirement, and for reasons mentioned in Introduction to Phoronix Test Suite, PTS must be executed as root and the system-wide configuration file must be modified to specify a directory on the data partition's file system. So, the Results Directory parameter value in the XML hierarchy Phoronix Test Suite -> Options -> Testing must be changed to reflect the desired directory. I changed the value from

~/.phoronix-test-suite/test-results/

to

/home/brook/DataEXT4/phoronix-test-suite/test-results/

With this change, no matter on which distribution PTS is run, the results will be saved to this location. This configuration change on the PTS instances installed on Solus and Garuda is required so that the results can be merged and analyzed together. Because of the power of PTS other configurations and workflows are possible to achieve the same results, but for my use case this is simplest.

Also, in order to download and install tests only once, instead of performing the download and installation on both distributions' instances of PTS, I changed the Environment Directory parameter value in the XML hierarchy Phoronix Test Suite -> Options -> Installation and the CacheDirectory parameter value in the XML hierarchy Phoronix Test Suite -> Options -> Installation, respectively, to

/home/brook/DataEXT4/phoronix-test-suite/installed-tests/

and

/home/brook/DataEXT4/phoronix-test-suite/download-cache/

With this change, tests installed in an instance of PTS on any of the distributions on the computer will be accessible from any other. These configuration changes must be performed in the /etc/phoronix-test-suite.xml file of all distributions on which PTS is installed -- in the case of the two distributions to be benchmarked here, in the instance of this file on both Solus and Garuda.

Phoronix Test Suite System-Wide Configuration File

Installing Tests and Test Suites

Installing Test Suites

Individual benchmarking tests or collections of tests grouped in a test suite must be installed to perform benchmarks. We saw above that suites that are available for installation form openbenchmarking.org repository mirrors can be listed with:

sudo phoronix-test-suite list-available-suites

The following listing shows the output of the command. Note that, for some reason, the pts/workstation suite is not actually listed in the output of list-available-suites but is listed on the openbenchmarking.org site.


 ╭─brook@g5 in ~/DataEXT4/SoftwareDownloads/phoronix-test-suite/phoronix-test-suite
 ╰─λ sudo phoronix-test-suite list-available-suites
[sudo] password for brook:            



Phoronix Test Suite v10.4.0
Available Suites

  pts/audio-encoding               - Audio Encoding                   System
  pts/av1                          - AV1                              System
  pts/bioinformatics               - Bioinformatics                   System
  pts/browsers                     - Web Browsers                     System
  pts/cad                          - CAD                              System
  pts/chess                        - Chess Test Suite                 Processor
  pts/compilation                  - Timed Code Compilation           System
  pts/compiler                     - C/C++ Compiler Tests             Processor
  pts/compression                  - Compression Tests                Processor
* pts/creator                      - Creator Workloads                System
  pts/cryptocurrency               - Cryptocurrency Benchmarks, CPU Mining Tests Processor
  pts/cryptography                 - Cryptography                     Processor
  pts/database                     - Database Test Suite              System
  pts/desktop-graphics             - Desktop Graphics                 System
  pts/disk                         - Disk Test Suite                  Disk
  pts/electronic-design            - Electronic Design                System
  pts/finance                      - Finance                          System
  pts/game-dev                     - Game Development                 System
  pts/hpc                          - HPC - High Performance Computing System
  pts/imaging                      - Imaging                          System
  pts/java                         - Java                             System
  pts/kernel                       - Common Kernel Benchmarks         System
  pts/linear-algebra               - Linear Algebra                   System
  pts/machine-learning             - Machine Learning                 System
  pts/memory                       - Memory Test Suite                Memory
  pts/molecular-dynamics           - Molecular Dynamics               System
  pts/mpi                          - MPI Benchmarks                   System
* pts/multicore                    - Multi-Core                       Processor
  pts/network                      - Networking Test Suite            Network
  pts/nvidia-gpu-compute           - NVIDIA GPU Compute               Graphics
  pts/ocr                          - OCR                              System
  pts/oneapi                       - Intel oneAPI                     System
  pts/opencl                       - OpenCL                           System
  pts/productivity                 - Productivity                     System
  pts/programmer                   - Programmer / Developer System Benchmarks System
  pts/python                       - Python                           System
  pts/quantum-mechanics            - Quantum Mechanics                System
  pts/raytracing                   - Raytracing                       System
* pts/renderers                    - Renderers                        Processor
  pts/scientific-computing         - Scientific Computing             System
  pts/sdr                          - Software Defined Radio           System
  pts/server                       - Server                           System
  pts/single-threaded              - Single-Threaded                  System
  pts/speech                       - Speech                           System
  pts/steam                        - Steam                            Graphics
  pts/telephony                    - Telephony                        System
  pts/texture-compression          - Texture Compression              System
  pts/unigine                      - Unigine Test Suite               Graphics
  pts/video-encoding               - Video Encoding                   System
  pts/vulkan-compute               - Vulkan Compute                   Graphics
  pts/vulkan-rt                    - Vulkan Ray-Tracing               Graphics

* Indicates a partially supported suite.



 ╭─brook@g5 in ~/DataEXT4/SoftwareDownloads/phoronix-test-suite/phoronix-test-suite took 26s
 ╰─λ
 

Creating a Custom Test Suite from Installed Tests

A custom test suite collection can be created from all of the installed or available tests by using the command argument build-test-suite. When used without any options an interactive tool is started to guide the user in selecting the tests and suites to add to the new custom suite; if test names and suite names are provided as options, as in:

sudo phoronix-test-suite build-suite test-1 test-2 ... test-n suite-1 suite-2 suite-n

where test-1, test-1 ... test-n are individual test identifiers of tests to be included in the suite. Test suites created by executing the build-test-suite command as root are saved in /var/lib/phoronix-test-suite/test-suites/local/ in a directory named after the created test suite name. The directory will contain the test definition in an .xml file named suite-definition.xml.

I used the command to create a new test suite of the suites that were successfully installed and a selection of tests that were successfully installed from the failed test suite installations. The following table shows the tests included in the newly created test suite for the purposes of this comparison benchmark.

Suite Tests in Suite Tests Included from Suite
pts/kernel sqlite-speedtest
pmbench
openssl
ctx-clock
hackbench
mutex
ipc-benchmark
stress-ng
osbench
pts/disk sqlite
fs-mark
compilebench
ior
iozone
dbench
fio
postmark
fs-mark
compilebench
postmark
pts/memory ramspeed
stream
t-test1
cachebench
tinymembench
mbw
ramspeed
stream
t-test1
cachebench
mbw
pts/workstation blender
rodinia
parboil
himeno
brl-cad
x265
paraview
swet
sysbench
git
blender
rodinia
parboil
himeno
brl-cad
x265
paraview
swet
sysbench
git
pts/programmer








node-web-tooling
compress-zstd
pyperformance
pybench
cryptsetup
build-eigen
build-mplayer
build2
mt-dgemm
arrayfire
amg

The following listing shows the command in use, and the subsequent interaction, to create a test suite composed of the tests mentioned above named odrts.

╭─brook@g5 in ~ took 5s
╰─λ sudo phoronix-test-suite build-suite pts/workstation fs-mark compilebench postmark ramspeed stream t-test1 cachebench mbw sqlite-speedtest pmbench openssl ctx-clock hackbench mutex ipc-benchmark stress-ng osbench node-web-tooling compress-zstd pyperformance pybench cryptsetup build-eigen build-mplayer build2 mt-dgemm arrayfire amg
[sudo] password for brook:            



Phoronix Test Suite v10.4.0
Test Suite Creation


Enter name of suite: odrts

1: System
2: Processor
3: Disk
4: Graphics
5: Memory
6: Network
7: OS
8: Other
Select test type: 8

Enter suite maintainer name: ORDINATECHNIC

Enter suite description: Test suite composed of the suite pts/workstation and a selection of tests from the suites pts/kernel, pts/disk, pts/memory, and pts/programmer.
Bind current test profile versions to test suite (Y/n): 


FS-Mark 3.3:
pts/fs-mark-1.0.2
Disk Test Configuration
1: 1000 Files, 1MB Size
2: 1000 Files, 1MB Size, No Sync/FSync
3: 5000 Files, 1MB Size, 4 Threads
4: 4000 Files, 32 Sub Dirs, 1MB Size
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 5



Compile Bench 0.6:
pts/compilebench-1.0.3
Disk Test Configuration
1: Initial Create
2: Compile
3: Read Compiled Tree
4: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 4



RAMspeed SMP 3.5.0:
pts/ramspeed-1.4.3
Memory Test Configuration
1: Copy
2: Scale
3: Add
4: Triad
5: Average
6: Test All Options
** Multiple items can be selected, delimit by a comma. **
Type: 6


1: Integer
2: Floating Point
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Benchmark: 3



Stream 2013-01-17:
pts/stream-1.3.2
Memory Test Configuration
1: Copy
2: Scale
3: Add
4: Triad
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Type: 5



t-test1 2017-01-13:
pts/t-test1-1.0.1
Memory Test Configuration
1: 1
2: 2
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Threads: 3



CacheBench:
pts/cachebench-1.1.2
Processor Test Configuration
1: Read
2: Write
3: Read / Modify / Write
4: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 4



MBW 2018-09-08:
pts/mbw-1.0.0
Memory Test Configuration
1: Memory Copy
2: Memory Copy, Fixed Block Size
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 3


1: 128 MiB
2: 512 MiB
3: 1024 MiB
4: 4096 MiB
5: 8192 MiB
6: Test All Options
** Multiple items can be selected, delimit by a comma. **
Array Size: 6



pmbench:
pts/pmbench-1.0.2
Memory Test Configuration
1: 1
2: 2
3: 4
4: 8
5: 12
6: Test All Options
** Multiple items can be selected, delimit by a comma. **
Concurrent Worker Threads: 6


1: 100% Writes
2: 50%
3: 80% Reads 20% Writes
4: 100% Reads
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Read-Write Ratio: 1,3,4



Hackbench:
pts/hackbench-1.0.0
Processor Test Configuration
1: 1
2: 2
3: 4
4: 8
5: 16
6: 32
7: Test All Options
** Multiple items can be selected, delimit by a comma. **
Count: 7


1: Process
2: Thread
3: Test All Options
** Multiple items can be selected, delimit by a comma. **
Type: 3



BenchmarkMutex:
pts/mutex-1.0.0
System Test Configuration
1: Mutex Lock Unlock std::mutex
2: Mutex Lock Unlock std::mutex
3: Mutex Lock Unlock pthread_mutex
4: Mutex Lock Unlock ticket_spinlock
5: Mutex Lock Unlock spinlock
6: Mutex Lock Unlock spinlock_amd
7: Shared Mutex Lock Shared
8: Semaphore Release And Acquire
9: Test All Options
** Multiple items can be selected, delimit by a comma. **
Benchmark: 9



IPC_benchmark:
pts/ipc-benchmark-1.0.0
Processor Test Configuration
1: Unnamed Pipe
2: FIFO Named Pipe
3: Unnamed Unix Domain Socket
4: TCP Socket
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Type: 5


1: 128
2: 256
3: 512
4: 1024
5: 2048
6: 4096
7: Test All Options
** Multiple items can be selected, delimit by a comma. **
Message Bytes: 7



Stress-NG 0.11.07:
pts/stress-ng-1.3.1
System Test Configuration
1:  CPU Stress
2:  Crypto
3:  Memory Copying
4:  Glibc Qsort Data Sorting
5:  Glibc C String Functions
6:  Vector Math
7:  Matrix Math
8:  Forking
9:  System V Message Passing
10: Semaphores
11: Socket Activity
12: Context Switching
13: Atomic
14: CPU Cache
15: Malloc
16: MEMFD
17: MMAP
18: NUMA
19: RdRand
20: SENDFILE
21: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 21



OSBench:
pts/osbench-1.0.2
OS Test Configuration
1: Create Files
2: Create Processes
3: Create Threads
4: Launch Programs
5: Memory Allocations
6: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 6



Zstd Compression 1.5.0:
pts/compress-zstd-1.5.0
Processor Test Configuration
1: 3
2: 3, Long Mode
3: 8
4: 8, Long Mode
5: 19
6: 19, Long Mode
7: Test All Options
** Multiple items can be selected, delimit by a comma. **
Compression Level: 7



PyPerformance 1.0.0:
pts/pyperformance-1.0.2
System Test Configuration
1:  2to3
2:  chaos
3:  crypto_pyaes
4:  django_template
5:  float
6:  go
7:  json_loads
8:  nbody
9:  pathlib
10: pickle_pure_python
11: python_startup
12: raytrace
13: regex_compile
14: Test All Options
** Multiple items can be selected, delimit by a comma. **
Benchmark: 14



ArrayFire 3.7:
pts/arrayfire-1.1.0
Processor Test Configuration
1: BLAS CPU
2: Conjugate Gradient CPU
3: BLAS OpenCL
4: Conjugate Gradient OpenCL
5: Test All Options
** Multiple items can be selected, delimit by a comma. **
Test: 5


Available Options:

1: Add Test
2: Add Sub-Suite
3: Save & Exit
Select next operation: 3


Saved -- to run this suite, type: phoronix-test-suite benchmark odrts



╭─brook@g5 in ~ took 3m29s
╰─λ

Unfortunately, Phoronix Test Suite -- for system-wide, privileged execution -- does not save created test suites in the same directory as that used to save installed tests and results, but in a subdirectory of /var/lib/phoronix-test-suite. That means we either have to recreate the suite in another distribution that we want to run the suite in for a comparison benchmark, or copy the test suite directory to any other distribution in which we want to run the suite. For this article, where the test suite was created in Garuda Linux, it was necessary to copy the directory to the appropriate directory in the Solus installation, as in:[1]

 ╭─brook@g5 in /run/media/brook/d002fda3-1a8a-4dca-89b7-7ebf7705e264/@/var/lib/phoronix-test-suite/test-suites/local🔒 took 3ms
 ╰─λ sudo cp -r odrts/ /var/lib/phoronix-test-suite/test-suites/local/
Password: 

 ╭─brook@g5 in /run/media/brook/d002fda3-1a8a-4dca-89b7-7ebf7705e264/@/var/lib/phoronix-test-suite/test-suites/local🔒 took 3s
 ╰─λ

When the tests were first installed on Garuda, because of the changes to the installation directory setting in the configuration file, they are accessible to instances of Phoronix on other distributions -- as long as the same change is made to the other distributions' Phoronix configuration file. But because when the tests were installed on Garuda, Phoronix Test Suite automatically installs the dependencies using the distribution's -- in this case Garuda's -- package manager on the current (Garuda) OS. This means that even though the tests were accessible to Solus, the required dependencies on packages from the Solus repositories would not be available to the PTS installation on Solus. A PTS command named install-dependencies is available that will use the system package manager to install dependencies for a specified test or test suite. This command was used to ensure that the necessary dependencies on distribution packages would be available to Phoronix. The listing below shows the execution of this command on Solus and its output.

 ╭─brook@g5 in repo: ordinatechnic on  exp via  v2.7.18 took 4m24s
 ╰─λ sudo phoronix-test-suite install-dependencies odrts
Password: 

    Evaluating External Test Dependencies ................................................................
    Evaluating System Dependencies .......................................................................

The following dependencies are needed and will be installed: 

- bzip2-devel
- freeglut-devel
- ocl-icd-devel
- openmpi
- libpng-devel
- p7zip
- yasm
- libaio-devel
- nodejs
- libboost-devel
- openblas-devel
- fftw-devel

This process may take several minutes.
Please enter your root password below:
Safety switch forces the upgrade of following packages:
libnspr  libnss  systemd
Following packages will be installed:
bzip2-devel    fftw-devel  freeglut-devel  libaio-devel    libboost-devel
libnspr        libnss      libpng-devel    nodejs          ocl-icd       
ocl-icd-devel  openblas    openblas-devel  opencl-headers  openmpi       
p7zip          systemd     systemd-devel   yasm          
Total size of package(s): 49.68 MB
Downloading 1 / 19
Package systemd found in repository Solus
systemd-95-97-1-x86_64.delta.eopkg (3.1 MB)100%      1.74 MB/s [00:00:01] [complete]
Downloading 2 / 19
Package libnspr found in repository Solus
libnspr-4.32-20-1-x86_64.eopkg (115.0 KB)100%    211.41 MB/s [00:00:00] [complete]
Downloading 3 / 19
Package libnss found in repository Solus
libnss-48-49-1-x86_64.delta.eopkg (1.4 MB)100%      3.35 MB/s [00:00:00] [complete]
Downloading 4 / 19
Package fftw-devel found in repository Solus
fftw-devel-3.3.8-11-1-x86_64.eopkg (12.0 KB)100%    117.62 MB/s [00:00:00] [complete]
Downloading 5 / 19
Package libboost-devel found in repository Solus
libboost-devel-1.72.0-24-1-x86_64.eopkg (11.6 MB)100%      2.28 MB/s [00:00:00] [complete]
Downloading 6 / 19
Package systemd-devel found in repository Solus
systemd-devel-95-97-1-x86_64.delta.eopkg (20.0 KB)100%    207.74 MB/s [00:00:00] [complete]
Downloading 7 / 19
Package opencl-headers found in repository Solus
opencl-headers-2020.12.18-2-1-x86_64.eopkg (33.0 KB)100%    214.17 MB/s [00:00:00] [complete]
Downloading 8 / 19
Package ocl-icd found in repository Solus
ocl-icd-2.2.14-8-1-x86_64.eopkg (42.0 KB)100%    225.99 MB/s [00:00:00] [complete]
Downloading 9 / 19
Package ocl-icd-devel found in repository Solus
ocl-icd-devel-2.2.14-8-1-x86_64.eopkg (7.0 KB)100%    122.51 MB/s [00:00:00] [complete]
Downloading 10 / 19
Package openmpi found in repository Solus
openmpi-3.0.1-5-1-x86_64.eopkg (2.6 MB)100%      1.89 MB/s [00:00:00] [complete]
Downloading 11 / 19
Package nodejs found in repository Solus
nodejs-14.17.2-97-1-x86_64.eopkg (18.2 MB)100%      2.27 MB/s [00:00:00] [complete]
Downloading 12 / 19
Package bzip2-devel found in repository Solus
bzip2-devel-1.0.8-14-1-x86_64.eopkg (3.0 KB)100%    143.72 MB/s [00:00:00] [complete]
Downloading 13 / 19
Package openblas found in repository Solus
openblas-0.3.13-21-1-x86_64.eopkg (8.1 MB)100%      2.28 MB/s [00:00:00] [complete]
Downloading 14 / 19
Package yasm found in repository Solus
yasm-1.3.0-6-1-x86_64.eopkg    (780.0 KB)100%    190.51 MB/s [00:00:00] [complete]
Downloading 15 / 19
Package openblas-devel found in repository Solus
openblas-devel-0.3.13-21-1-x86_64.eopkg (64.0 KB)100%    195.63 MB/s [00:00:00] [complete]
Downloading 16 / 19
Package libaio-devel found in repository Solus
libaio-devel-0.3.11-3-1-x86_64.eopkg (3.0 KB)100%    132.04 MB/s [00:00:00] [complete]
Downloading 17 / 19
Package freeglut-devel found in repository Solus
freeglut-devel-3.2.1-13-1-x86_64.eopkg (12.0 KB)100%     96.92 MB/s [00:00:00] [complete]
Downloading 18 / 19
Package p7zip found in repository Solus
p7zip-17.04-11-1-x86_64.eopkg  (3.7 MB)100%      2.33 MB/s [00:00:00] [complete]
Downloading 19 / 19
Package libpng-devel found in repository Solus
libpng-devel-1.6.37-20-1-x86_64.eopkg (97.0 KB)100%    217.01 MB/s [00:00:00] [complete]
Installing 1 / 19
systemd-95-97-1-x86_64.delta.eopkg [cached]
Installing systemd, version 247.8, release 97
Upgrading to new upstream version
Extracting the files of systemd
Upgraded systemd                                                                                              
Installing 2 / 19
libnspr-4.32-20-1-x86_64.eopkg [cached]
Installing libnspr, version 4.32, release 20
Upgrading to new upstream version
Extracting the files of libnspr
Upgraded libnspr                                                                                              
Installing 3 / 19
libnss-48-49-1-x86_64.delta.eopkg [cached]
Installing libnss, version 3.68, release 49
Upgrading to new upstream version
Extracting the files of libnss
Upgraded libnss                                                                                               
Installing 4 / 19
fftw-devel-3.3.8-11-1-x86_64.eopkg [cached]
Installing fftw-devel, version 3.3.8, release 11
Extracting the files of fftw-devel
Installed fftw-devel                                                                                          
Installing 5 / 19
libboost-devel-1.72.0-24-1-x86_64.eopkg [cached]
Installing libboost-devel, version 1.72.0, release 24
Extracting the files of libboost-devel
Installed libboost-devel                                                                                      
Installing 6 / 19
systemd-devel-95-97-1-x86_64.delta.eopkg [cached]
Installing systemd-devel, version 247.8, release 97
Upgrading to new upstream version
Extracting the files of systemd-devel
Upgraded systemd-devel                                                                                        
Installing 7 / 19
opencl-headers-2020.12.18-2-1-x86_64.eopkg [cached]
Installing opencl-headers, version 2020.12.18, release 2
Extracting the files of opencl-headers
Installed opencl-headers                                                                                      
Installing 8 / 19
ocl-icd-2.2.14-8-1-x86_64.eopkg [cached]
Installing ocl-icd, version 2.2.14, release 8
Extracting the files of ocl-icd
Installed ocl-icd                                                                                             
Installing 9 / 19
ocl-icd-devel-2.2.14-8-1-x86_64.eopkg [cached]
Installing ocl-icd-devel, version 2.2.14, release 8
Extracting the files of ocl-icd-devel
Installed ocl-icd-devel                                                                                       
Installing 10 / 19
openmpi-3.0.1-5-1-x86_64.eopkg [cached]
Installing openmpi, version 3.0.1, release 5
Extracting the files of openmpi
Installed openmpi                                                                                             
Installing 11 / 19
nodejs-14.17.2-97-1-x86_64.eopkg [cached]
Installing nodejs, version 14.17.2, release 97
Extracting the files of nodejs
Installed nodejs                                                                                              
Installing 12 / 19
bzip2-devel-1.0.8-14-1-x86_64.eopkg [cached]
Installing bzip2-devel, version 1.0.8, release 14
Extracting the files of bzip2-devel
Installed bzip2-devel                                                                                         
Installing 13 / 19
openblas-0.3.13-21-1-x86_64.eopkg [cached]
Installing openblas, version 0.3.13, release 21
Extracting the files of openblas
Installed openblas                                                                                            
Installing 14 / 19
yasm-1.3.0-6-1-x86_64.eopkg [cached]
Installing yasm, version 1.3.0, release 6
Extracting the files of yasm
Installed yasm                                                                                                
Installing 15 / 19
openblas-devel-0.3.13-21-1-x86_64.eopkg [cached]
Installing openblas-devel, version 0.3.13, release 21
Extracting the files of openblas-devel
Installed openblas-devel                                                                                      
Installing 16 / 19
libaio-devel-0.3.11-3-1-x86_64.eopkg [cached]
Installing libaio-devel, version 0.3.11, release 3
Extracting the files of libaio-devel
Installed libaio-devel                                                                                        
Installing 17 / 19
freeglut-devel-3.2.1-13-1-x86_64.eopkg [cached]
Installing freeglut-devel, version 3.2.1, release 13
Extracting the files of freeglut-devel
Installed freeglut-devel                                                                                      
Installing 18 / 19
p7zip-17.04-11-1-x86_64.eopkg [cached]
Installing p7zip, version 17.04, release 11
Extracting the files of p7zip
Installed p7zip                                                                                               
Installing 19 / 19
libpng-devel-1.6.37-20-1-x86_64.eopkg [cached]
Installing libpng-devel, version 1.6.37, release 20
Extracting the files of libpng-devel
Installed libpng-devel

There are dependencies still missing from the system:
- OpenMPI

1: Ignore missing dependencies and proceed with installation.
2: Skip installing the tests with missing dependencies.
3: Re-attempt to install the missing dependencies.
4: Quit the current Phoronix Test Suite process.
Missing dependencies action: 3

The following dependencies are needed and will be installed: 

- openmpi

This process may take several minutes.
Please enter your root password below:
The following package(s) are already installed and are not going to be installed again:
openmpi
No packages to install.


 ╭─brook@g5 in repo: ordinatechnic on  exp via  v2.7.18 took 3m2s
 ╰─λ

Performing Tests

I installed PTS, created the test suite, and ran the suite first on Garuda Linux. I then installed PTS on Solus and copied the test suite definition to the appropriate directory then ran the test on Solus. The Solus testing completed without error except for the tests that apparently did not apply to the system. The Garuda Linux test, however, hung on the first arrayfire test for five hours. The PTS manual documents methods to skip the current test but continue testing by creating a file named skip-testing by running, in a different terminal,

touch ~/.phoronix-test-suite/skip-test

I tried this even though it would seem that this would only apply for PTS execution in non-privileged, per-user mode. I also tried what would be more appropriate for PTS execution in system-wide mode with elevated privileges:

sudo touch /var/lib/phoronix-test-suite/skip-test

A similar file called halt-testing can be created to save the results of already completed tests and stop execution of the testing. However none of these had any effect. I finally resorted to killing a subprocess of the arrayfire test. This action removed PTS from its hung state, but the remaining tests were not performed. The output shown below was printed, which indicates that only compilebench and paraboil did not complete successfully, however many other remaining tests were not performed.

ArrayFire 3.7:
pts/arrayfire-1.1.0 [Test: BLAS OpenCL]
Test 96 of 172
Estimated Trial Run Count:    3                               
Estimated Test Run-Time:      1 Minute                        
Estimated Time To Completion: 5 Hours, 14 Minutes [13:15 EDT] 
Started Run 1 @ 08:01:42



The test run did not produce a result.

The following tests failed to properly run:

- pts/compilebench-1.0.3: Test: Compile
- pts/compilebench-1.0.3: Test: Initial Create
- pts/compilebench-1.0.3: Test: Read Compiled Tree
- pts/parboil-1.2.1: Test: OpenMP CUTCP



Percentile Classification Of Current Benchmark Run
DISK
FS-Mark
1.F.1.S:                            23rd
5.F.1.S.4.T:                        11th
4.F.3.S.D.1.S:                      20th
1.F.1.S.N.S.F:                      79th
PostMark
D.T.P:                              68th
GRAPHICS
ParaView
Many Spheres - 1920 x 1080:         1st
Wavelet Volume - 1920 x 1080:       2nd
Wavelet Contour - 1920 x 1080:      2nd
MEMORY
RAMspeed SMP
Add - Integer:                      61st
Copy - Integer:                     51st
Scale - Integer:                    53rd
Triad - Integer:                    62nd
Average - Integer:                  65th
Add - Floating Point:               62nd
Copy - Floating Point:              77th
Scale - Floating Point:             76th
Triad - Floating Point:             64th
Average - Floating Point:           72nd
Stream
Copy:                               31st
Scale:                              33rd
Triad:                              33rd
Add:                                34th
MBW
Memory Copy - 128 MiB:              73rd
Memory Copy - 512 MiB:              65th
Memory Copy - 1024 MiB:             74th
Memory Copy - 4096 MiB:             57th
Memory Copy - 8192 MiB:             51st
M.C.F.B.S - 128 MiB:                89th
M.C.F.B.S - 512 MiB:                74th
M.C.F.B.S - 1024 MiB:               79th
M.C.F.B.S - 4096 MiB:               73rd
M.C.F.B.S - 8192 MiB:               85th
t-test1
1:                                  78th
2:                                  90th
pmbench
1 - 100% Reads:                     80th
2 - 100% Reads:                     81st
4 - 100% Reads:                     76th
8 - 100% Reads:                     18th
1 - 100% Writes:                    96th
2 - 100% Writes:                    97th
4 - 100% Writes:                    97th
8 - 100% Writes:                    11th
1 - 8.R.2.W:                        92nd
2 - 8.R.2.W:                        93rd
4 - 8.R.2.W:                        76th
8 - 8.R.2.W:                        70th
OS
OSBench
Create Files:                       51st
Create Threads:                     56th
Launch Programs:                    76th
Create Processes:                   74th
Memory Allocations:                 58th
PROCESSOR
IPC_benchmark
TCP Socket - 128:                   38th
TCP Socket - 256:                   39th
TCP Socket - 512:                   38th
TCP Socket - 1024:                  42nd
TCP Socket - 2048:                  51st
TCP Socket - 4096:                  63rd
Unnamed Pipe - 128:                 51st
Unnamed Pipe - 256:                 54th
Unnamed Pipe - 512:                 49th
Unnamed Pipe - 1024:                62nd
Unnamed Pipe - 2048:                63rd
Unnamed Pipe - 4096:                71st
FIFO Named Pipe - 128:              16th
FIFO Named Pipe - 256:              18th
FIFO Named Pipe - 512:              14th
FIFO Named Pipe - 1024:             12th
FIFO Named Pipe - 2048:             31st
FIFO Named Pipe - 4096:             48th
U.U.D.S - 128:                      45th
U.U.D.S - 256:                      46th
U.U.D.S - 512:                      44th
U.U.D.S - 1024:                     48th
U.U.D.S - 2048:                     49th
U.U.D.S - 4096:                     69th
Rodinia
OpenMP LavaMD:                      12th
OpenMP CFD Solver:                  17th
Algebraic Multi-Grid Benchmarkfcon
16th
CacheBench
Read:                               87th
Write:                              87th
R.M.W:                              87th
Zstd Compression
3 - Compression Speed:              18th
3 - D.S:                            59th
8 - Compression Speed:              11th
8 - D.S:                            50th
19 - Compression Speed:             41st
19 - D.S:                           52nd
3, Long Mode - Compression Speed:   74th
3, Long Mode - D.S:                 57th
8, Long Mode - Compression Speed:   14th
8, Long Mode - D.S:                 49th
19, Long Mode - Compression Speed:  37th
19, Long Mode - D.S:                51st
ArrayFire
BLAS CPU:                           53rd
OpenBenchmarking.org Percentile
Do you want to view the results in your web browser (Y/^[[B^   Would you like to upload the results to OpenBenchmarking.org (y/n):     Would you like to upload the results to OpenBenchmarking.org (y/n):     Would you like to upload the results to OpenBenchmarking.org (y/n):
Would you like to upload the results to OpenBenchmarking.org (y/n): n

⏎
╭─brook@g5 in ~ took 11h9m11s
╰─λ

Of the tests included in the newly created test suite, composed of the tests shown in the table, above, the tests compilebench, parboil, mt-dgemm, himeno, build-mplayer, build2, build-eigen, hackbench, openssl, node-web-tooling, cryptsetup, sqlite-speedtest, ctx-clock, sysbench, blender, pybench, git, and one of two options of arrayfire did not run.

I created a new test suite composed of just these tests to run again using the build-test-suite command mentioned previously. As it turns out, some of the tests included in the first test suite, such as pyperformance, mutex, and stress-ng, did not run in either Solus or Garuda, possibly because some libraries, were not available, maybe due to the fact that only the integrated graphics adapter was in use. Also, of the tests that did run on Solus but not on Garuda (and also ran on both Solus and Garuda), only some of the specified test options were performed, for example, for the parboil test only one of the 10 available options were performed. So, when creating this second suite I chose the options that did run.

Conclusion

Based on the number of tests in which Garuda performed better than Solus, another distribution that is regarded as one that is relatively fast, the Garuda developers have indeed succeeded in their goal of optimizing the distribution for performance.

While this performance is desirable for certain use cases it is somewhat of a trade-off with other areas that might be a concern for some users. Read the review to learn more about these issues and Garuda's other characteristics in the review: Garudal Linux Review [KDE Dragonized (D460nized),210621].

Notes:

  1. [1]

    The working directory displayed as part of the prompt created by Starship in Solus shows the actual location of the directory in the mounted Garuda partition's btrfs subvolume, namely /@/var/lib/phoronix-test-suite/test-suites/local.